package com.learn.singleton003;

import java.util.concurrent.TimeUnit;

/** 懒汉式-同步代码块-线程不安全-【不可用】
 * @author 1
 */
public class SingleSynchronizedUnsafe {

    /**
     * 小明： 静态变量，初始化是null，没有创建对象
     * 老王： 嗯嗯
     */
    private static SingleSynchronizedUnsafe singleton;

    /**
     * 小明： 构造方法私有化，外部不可以直接new对象
     * 老王： 嗯嗯
     */
    private SingleSynchronizedUnsafe() {

    }

    /**
     * 小明： 提供静态方法，获取实例对象入口。虽然加了一把锁，但是无法保证线程安全。
     * 老王： 嗯嗯
     * @return
     */
    public static SingleSynchronizedUnsafe getInstance(){
        if (singleton == null) {
            try {
                //模拟操作中的停顿
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            /**
             * 小明：
             * 这个if (singleton == null)判断语句块，还是存在线程安全的问题。下面这个
             * synchronized锁，也不太管用的。
             */
            synchronized (SingleSynchronizedUnsafe.class) {
                singleton = new SingleSynchronizedUnsafe();
            }
        }
        return singleton;
    }
}
